home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacHaskell 2.2 / runtime / array-prims.scm next >
Encoding:
Text File  |  1994-09-27  |  1.3 KB  |  56 lines  |  [TEXT/CCL2]

  1. ;;; array-prims.scm -- array primitives
  2. ;;;
  3. ;;; author :  John & Sandra
  4. ;;; date   :  14 May 1993
  5.  
  6.  
  7. ;;; Vector reference, returning unboxed value
  8.  
  9. (define-syntax (prim.vector-sel vec i)
  10.   `(vector-ref ,vec ,i))
  11.  
  12.  
  13. ;;; Destructive vector update.  All arguments are unboxed.
  14.  
  15. (define-syntax (prim.vector-update vec i newval)
  16.   `(setf (vector-ref ,vec ,i) ,newval))
  17.  
  18.  
  19. ;;; Make a vector whose elements are initialized to val (which is boxed).
  20.  
  21. (define-syntax (prim.make-vector size val)
  22.   `(make-vector ,size ,val))
  23.  
  24.  
  25. ;;; Copy an existing vector.
  26.  
  27. (define-syntax (prim.copy-vector vec)
  28.   `(vector-copy ,vec))
  29.  
  30.  
  31. ;;; Explicit force operation
  32.  
  33. (define-syntax (prim.force x)
  34.   `(force ,x))
  35.  
  36.  
  37. ;;; The first parameter is forced first since this prim is declared to
  38. ;;; be strict in the first arg.
  39.  
  40. (define-syntax (prim.strict1 force-this leave-this)
  41.   `(begin
  42.      ;; Can't ignore the first argument entirely since doing so
  43.      ;; might result in variable-bound-but-not-referenced errors.
  44.      ;; Hopefully the Lisp compiler will be smart enough to get
  45.      ;; rid of this when appropriate.
  46.      ,force-this
  47.      ;; Don't generate a stupid (force (delay x)) sequence here if
  48.      ;; we don't need to.
  49.      ,(if (and (pair? leave-this)
  50.            (or (eq? (car leave-this) 'delay)
  51.            (eq? (car leave-this) 'box)))
  52.       (cadr leave-this)
  53.       `(force ,leave-this))))
  54.  
  55.  
  56.